package single;

/**
 * 单例模式-懒汉式（线程安全）
 *
 * @author lihaoshan
 * @date 2018-06-15
 * */
public class SingletonLazy {

    private static SingletonLazy instance;

    private SingletonLazy (){}

    /**
     * 获取唯一可用的对象
     *
     * 是否 Lazy 初始化：是
     *
     * 描述：这种方式具备很好的 lazy loading，能够在多线程中很好的工作，但是，效率很低，99% 情况下不需要同步。
     * 优点：第一次调用才初始化，避免内存浪费。
     * 缺点：必须加锁 synchronized 才能保证单例，但加锁会影响效率。
     * getInstance() 的性能对应用程序不是很关键（该方法使用不太频繁）。
     * */
    public static synchronized SingletonLazy getInstance() {
        if (instance == null) {
            instance = new SingletonLazy();
        }
        return instance;
    }

    public void showMessage(){
        System.out.println("showMessage：Hello Lazy");
    }
}
